package com.holyn.guofang.presenter.distinguish;

import com.holyn.guofang.model.webhttp.wo.BrandItemInfoWo;
import com.holyn.guofang.model.webhttp.wo.GraphTransWo;
import com.holyn.guofang.model.webhttp.wo.ImageWo;
import com.holyn.guofang.model.webhttp.wo.StatusWo;
import com.holyn.guofang.model.webhttp.wo.TaskIDWo;
import com.holyn.guofang.model.webhttp.wo.UserCardListWo;
import com.holyn.guofang.model.webhttp.wo.UserInfoWo;
import com.holyn.guofang.presenter.AbstractBasePresenterImp;
import com.holyn.guofang.presenter.BaseView;

/**
 * Created by Holyn on 2017/6/12.
 */

public class DistinguishContract {
    public  static abstract class  Presenter extends AbstractBasePresenterImp {
        public Presenter(BaseView baseView) {
            super(baseView);
        }

        public abstract void addCommonViewListener(DistinguishContract.CommonView commonView);
        public abstract void addBrandItemViewListener(DistinguishContract.BrandItemView brandItemView);
        public abstract void addUploadViewListener(DistinguishContract.UploadView uploadView);

        public abstract void addResposeGraphTransListener(DistinguishContract.ResposeGraphTransListener resposeGraphTransListener);


        /**
         * 执行商标识别
         * @param TaskID 任务 ID，由客户端请求前产生
         * @param FrontCount 首次返回前面记录数量
         * @param QueryMode 查询方式
         * @param SrcImgID 商标源图 ID(非图片流，若该值为空或空字符串， 则需要传一个图片流)
         * @param ImgIDs 其它图文件名，可以是多个，可空，多个时用“;” 分割
         * @param CnContent 商标的中文文字
         * @param EnContent 商标的英文文字
         * @param ImageCode 商标的图形要素图形要素编码
         * @param MarkClass 类别
         * @param MarkGroup 群组
         * @param ImageQueryMode 图像识别查询算法类型
         * @param ImageAlgorithm 图像识别的查询算法
         * @param CnQueryMode 中文查询算法类型
         * @param CnAlgorithm 中文的查询算法
         * @param EnQueryMode 西文查询算法类型
         * @param EnAlgorithm 英文的查询算法
         * @param CodeQueryMode 图形要素编码查询算法类型
         * @param CodeAlgorithm 图形要素编码的查询算法
         * @param State 状态过滤
         * @param DateType 过滤日期
         * @param BeginDate 过滤起始日期
         * @param EndDate 过滤截止日期
         */
        public abstract void postBrandDistingush(
                final int requestAction,
                Integer TaskID,
                Integer FrontCount,
                String QueryMode,
                String SrcImgID,
                String ImgIDs,
                String CnContent,
                String EnContent,
                String ImageCode,
                String MarkClass,
                String MarkGroup,
                String ImageQueryMode,
                String ImageAlgorithm,
                String CnQueryMode,
                String CnAlgorithm,
                String EnQueryMode,
                String EnAlgorithm,
                String CodeQueryMode,
                String CodeAlgorithm,
                String State,
                String DateType,
                String BeginDate,
                String EndDate);

        /**
         * 获取任务 ID。
         */
        public abstract void postTaskID(final int requestAction);
        public abstract void uploadImage(final int requestAction, String path);
        public abstract void postSearchResultByTaskID(final int requestAction, Integer TaskID, String SortType, Integer BeginRow,Integer EndRow);


        /**
         * 获取注册信息
         * 然后通过 判断返回参数 userCard ,如果该字段 内容为空，代表卡已过期，非空则代表未过期
         */
        public abstract void postUserInfo(final int requestAction);

        /**
         *  卡已过期,请求接口 2.5.6 获取用户的国方卡信息 （参数activeState取2）
         *  1.1：过期处理：请求接口 2.5.6 获取用户的国方卡信息 （参数activeState取2），根据返回数据：
         *  1.1.1—>如果 个数 大于 0 则 ，提示  当前国方卡已过期，请前往 我的-用卡管理 激活卡。
         *  1.1.2—>如果等于0，则提示  当前国方卡已过期，请前往 我的-购国方卡 购卡。
         *  1.2：未过期:
         *  无需处理,界面正常操作: 注册信息、替换主设备、使用日志
         *  执行B逻辑判断（下面详解）: 识别查询 、 商标查询
         *  先执行C逻辑，然后在执行B（下面详解）: 我的-处理进程
         */
        public abstract void postUserCardList(final int requestAction, Integer activeState, Integer pageSize, Integer page);

        /**
         * 未过期，C逻辑
         * 1、根据接口2.4.15 获取用户的任务信息列表 中 参数 unpay ，该参数是由多个未完成id组成的字符串（需要自己处理一下数据），
         * 详细看文档。具体操作就是：在任务列表里，点击已完成的任务（正在处理的没有 点击响应事件），获取接口2.4.15数据，然后根据 该任务id 是否在unpay 里面 ：
         * 1.1-> 如果不在，则代表已扣费，可以直接跳转界面。
         * 1.2-> 如果在，则执行B逻辑，只不过需注意的是，因为 处理进程界面 这里 无需等待查询的结果 ，所以直接跳到 B逻辑 中，
         * 是否弹框，然后判断1.1-1.3的那里，需留意如果扣费了，需要更改unpay数据。
         */
//        public abstract void postTaskList //接口在上面

        /**
         * B逻辑详解：
         * 1、首先触发这个逻辑是在  30秒前获取结果接口  或者 30秒后获取结果接口 （因为识别 跟 查询 的接口不一样，所以就不这注释接口了），
         * 当有结果返回，首先因为在判断A逻辑时 调用了 2.3.8 接口 获取注册信息，而里面有个validMethod参数，这个将决定你的扣费规则，参数描述文档有，
         * 不同的参数就弹出不同界面输入相对应数据，但需要注意：
         * 1.1->当validMethod=0 时，弹出界面，输入的密码需要md5加密。注意这个密码是在激活卡时（我的-用卡管理），当用户选择密码验证 时，需要弹框让用户设定密码，并非登录密码。
         * 1.2->当validMethod=1 时，弹出界面，点获取验证码按钮 对应接口 2.4.17 获取任务支付验证码
         * 1.3->当validMethod=2时，空值，这个就不用弹界面了，直接调用2.4.18接口。
         * 处理完 1.1 或 1.2 数据后，调用2.4.18 任务支付 ，其中参数validCode 就是上面的处理结果。
         * 最后，如果 2.4.18 任务支付 接口返回成功，代表扣费成功，到此为止
         */
        public abstract void postTaskPayCode(final int requestAction);//2.4.17

        public abstract void postTaskPay(final int requestAction, Integer taskID, String validCode);//2.4.18


        /**
         * 2.4.19 获取检索内容接口
         */
        public abstract void postGraphTranslation(final int requestAction, String SrcImgID, Integer isAutoImgToWord, Integer isAutoImgToImgbasic, String UnionType);


    }

    /**
     * 普通识别查询与高级识别查询来实现
     */
    public interface CommonView {
        void responseSuccess(final Integer requestAction, BrandItemInfoWo brandItemInfoWo);
        void responseSuccess(final Integer requestAction, TaskIDWo taskIDWo);
        void responseSuccess(final Integer requestAction, ImageWo imageWo);
        void responseSuccess(final int requestAction, UserInfoWo userInfoWo);
        void responseSuccess(final int requestAction, UserCardListWo userCardListWo);
        void responseSuccess(final int requestAction, StatusWo statusWo);//2.4.17 获取任务支付验证码、 2.4.18 任务支付
    }

    public interface BrandItemView {
        void responseSuccess(Integer requestAction, BrandItemInfoWo brandItemInfoWo);
    }

    public interface UploadView {
        void responseSuccess(Integer requestAction, ImageWo imageWo);
    }

    public interface ResposeGraphTransListener{
        void resposeGraphTrans(final int requestAction, GraphTransWo graphTransWo);
    }
}
